import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let loadingBarItems = [
    {
        "label": "LoadingBar_Create",
        "insertText": dedent`
        GUI:LoadingBar_Create(\${1:parent}, \${2:ID}, \${3:x}, \${4:y}, \${5:nimg}, \${6:direction})
        `,
        "documentation": dedent`# 创建进度条
        [在线文档](http://engine-doc.996m2.com/web/#/22/2173)

        | 参数      | 必选 | 类型   | 注释                         |
        | :-------- | :--- | :----- | :--------------------------- |
        | parent    | 是   | obj    | 父节点对象                   |
        | ID        | 是   | string | 唯一ID                       |
        | x         | 是   | int    | 位置 横坐标                  |
        | y         | 是   | int    | 位置 纵坐标                  |
        | nimg      | 是   | string | 图片路径                     |
        | direction | 是   | int    | 方向： 0 从左到右 1 从右到左 |

        - 示例代码

        \`\`\`
        local imgBar = "res/private/gui_edit/LoadingBar.png"
        local loadingBar = GUI:LoadingBar_Create(parent, "loadingBar", 0, 0, imgBar, 0)
        \`\`\`
        `
    },
    {
        "label": "LoadingBar_loadTexture",
        "insertText": dedent`
        GUI:LoadingBar_loadTexture(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置进度条图片
        [在线文档](http://engine-doc.996m2.com/web/#/22/2173)

        | 参数   | 必选 | 类型   | 注释       |
        | :----- | :--- | :----- | :--------- |
        | widget | 是   | obj    | 进度条对象 |
        | value  | 是   | string | 图片路径   |

        `
    },
    {
        "label": "LoadingBar_setDirection",
        "insertText": dedent`
        GUI:LoadingBar_setDirection(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置进度条方向
        [在线文档](http://engine-doc.996m2.com/web/#/22/2173)

        | 参数   | 必选 | 类型 | 注释                         |
        | :----- | :--- | :--- | :--------------------------- |
        | widget | 是   | obj  | 进度条对象                   |
        | value  | 是   | int  | 方向： 0 从左到右 1 从右到左 |

        `
    },
    {
        "label": "LoadingBar_setPercent",
        "insertText": dedent`
        GUI:LoadingBar_setPercent(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置进度条进度
        [在线文档](http://engine-doc.996m2.com/web/#/22/2173)

        | 参数   | 必选 | 类型 | 注释        |
        | :----- | :--- | :--- | :---------- |
        | widget | 是   | obj  | 进度条对象  |
        | value  | 是   | int  | 进度(0-100) |

        `
    },
    {
        "label": "LoadingBar_getPercent",
        "insertText": dedent`
        GUI:LoadingBar_getPercent(\${1:widget})
        `,
        "documentation": dedent`# 获取进度条进度
        [在线文档](http://engine-doc.996m2.com/web/#/22/2173)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 进度条对象 |

        - 返回值：进度条进度

        `
    },
    {
        "label": "LoadingBar_setColor",
        "insertText": dedent`
        GUI:LoadingBar_setColor(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置进度条颜色
        [在线文档](http://engine-doc.996m2.com/web/#/22/2173)

        | 参数   | 必选 | 类型   | 注释            |
        | :----- | :--- | :----- | :-------------- |
        | widget | 是   | obj    | 进度条对象      |
        | value  | 是   | string | 色值(“#000000”) |

        `
    },
    {
        "label": "LoadingBar_getColor",
        "insertText": dedent`
        GUI:LoadingBar_getColor(\${1:widget})
        `,
        "documentation": dedent`# 获取进度条颜色
        [在线文档](http://engine-doc.996m2.com/web/#/22/2173)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 进度条对象 |

        - 返回值：string 进度条颜色值

        `
    }
]



export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    loadingBarItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
